home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 11 / FM Towns Free Software Collection 11.iso / t_os / tool / itl / sel / sel16.bas < prev    next >
Encoding:
BASIC Source File  |  1995-08-19  |  20.4 KB  |  584 lines

  1. 1 '=================  セレクターの為の初期設定
  2. 2 CLEAR ,,,,8192:MOUSE 0
  3. 3 S_O&=0:LOADM"BAS_LIB.REX",S_O&'  <=== BASLIB.REXのある所に書き換える
  4. 4 S_FULL=512:DIM S_F$(S_FULL),S_SEL%(6016*2)
  5. 5 GOSUB *S_PATH:S_P$=S_PATH$+"sel16.dat"+CHR$(0)
  6. 6 S_左上X=  0:S_左上Y=  0'      <=== FILE SELECTORの移動範囲を設定
  7. 7 S_右下X=639:S_右下Y=479' この値がオリジナルスクリーン座標を越えないように!
  8. 8 'ファイル名入力 |DIR移動禁止|拡張子(*,?も可) |メッセージ(MAX:ANK8文字)
  9. 9 'S_INPUT -1/0|S_PATH -1/0|S_KAKU$ ".TIF"ex.|S_MES$ "LOADTIFF"ex.
  10. 50000 '
  11. 50010 '□□ FILE SELECTOR「尽くせり」(FONT 16) V1.0 □□
  12. 50020 '
  13. 50030 *S_SEL
  14. 50040 '■  使用可能ドライブの取得
  15. 50050 S_DD$="AB":S_PATH$=STRING$(65,0)
  16. 50060 FOR S_A%=68 TO 80
  17. 50070  S_RET&=CALLM(S_O&,2,S_A%,VARPTR(S_PATH$))
  18. 50080  IF S_RET&=0 THEN S_DD$=S_DD$+CHR$(S_A%)
  19. 50090 NEXT
  20. 50100 S_DD$=S_DD$+"Q":S_DD=LEN(S_DD$)
  21. 50110 '■  初期化
  22. 50120 MOUSE 1,,,1:DEF FONT"システム   16ドット":DEF PEN 0
  23. 50130 S_Q=0:S_MK=0:S_EX=125:S_COL=12:S_MODE=0
  24. 50140 IF S_INPUT THEN S_EY=187 ELSE S_EY=166
  25. 50150 S_VSX1=VIEW(0):S_VSY1=VIEW(1):S_VSX2=VIEW(2):S_VSY2=VIEW(3)
  26. 50160 S_WSX1=WINDOW(0):S_WSY1=WINDOW(1):S_WSX2=WINDOW(2):S_WSY2=WINDOW(3)
  27. 50170 VIEW(0,0)-(S_右下X,S_右下Y):WINDOW(0,0)-(S_右下X,S_右下Y)
  28. 50180 '■  画面モード取得
  29. 50190 GET@A(S_SX,S_SY)-(S_SX,S_SY),S_SEL%,2
  30. 50200 PSET(S_SX,S_SY),[255,255,255]:S_SEL%(0)=0
  31. 50210 GET@A(S_SX,S_SY)-(S_SX,S_SY),S_SEL%
  32. 50220 PUT@A(S_SX,S_SY)-(S_SX,S_SY),S_SEL%,,,,,2
  33. 50230 IF S_SEL%(0)=15 THEN
  34. 50240  S_UN&=INT((126+7)/8)*2*188:S_M=0
  35. 50250 ELSE IF S_SEL%(0)=255 THEN
  36. 50260  S_UN&=126*188/2:S_M=2
  37. 50270  ERASE S_SEL%:DIM S_SEL%(S_UN&*2)
  38. 50280 ELSE IF S_SEL%(0)=32767 THEN
  39. 50290  S_UN&=126*188:S_M=1
  40. 50300  ERASE S_SEL%:DIM S_SEL%(S_UN&*2)
  41. 50310 ELSE IF S_SEL%(0)=-1 THEN
  42. 50320  S_UN&=126*188/2*3:S_M=1
  43. 50330  ERASE S_SEL%:DIM S_SEL%(S_UN&*2)
  44. 50340 ENDIF
  45. 50350 GET@A(S_SX,S_SY)-(S_SX+S_EX,S_SY+S_EY),S_SEL%,S_UN&
  46. 50360 GOSUB *S_11:LINE(S_SX,S_SY)-(S_SX+S_EX,S_SY+S_EY),PSET,,BF
  47. 50370 RET&=CALLM(S_O&,12,20,VARPTR(S_SEL%(0)),VARPTR(S_P$),0,3008)
  48. 50380 IF RET&<>0 THEN
  49. 50390  LINE(S_SX+1,S_SY+1)-(S_SX+S_EX-1,S_SY+S_EY-1),PSET,0,BF
  50. 50400  SYMBOL(S_SX+11,S_SY+36)," Can't Find",1,1,7
  51. 50410  SYMBOL(S_SX+11,S_SY+68)," [SEL16.DAT]",1,1,7
  52. 50420  SYMBOL(S_SX+11,S_SY+100),"Click Button.",1,1,7
  53. 50430  WHILE MOUSE(2,0)+MOUSE(2,1)=0:WEND:S_FILE$="":S_PATH$=""
  54. 50440  PUT@A(S_SX,S_SY)-(S_SX+S_EX,S_SY+S_EY),S_SEL%,,,,,S_UN&:RETURN
  55. 50450 ENDIF
  56. 50460 GOSUB *S_12:PUT@(S_SX,S_SY)-(S_SX+S_EX,S_SY+S_EY),S_SEL%
  57. 50470 IF S_KAKU$="" THEN S_KAKU$=".*"
  58. 50480 IF KLEFT$(S_KAKU$,1)<>"." THEN S_KAKU$="."+S_KAKU$
  59. 50490 S_MES$=LEFT$(S_MES$,8):S_KAKU$=LEFT$(S_KAKU$,4)
  60. 50500 IF S_PATH THEN
  61. 50510  GOSUB *S_PATH
  62. 50520  IF LEN(S_PATH$)>3 THEN S_PP$=KLEFT$(S_PATH$,LEN(S_PATH$)-1)
  63. 50530 ENDIF
  64. 50540 GOSUB *S_12:SYMBOL(S_SX+34,S_SY+3),S_MES$,1,.8!
  65. 50550 IF S_M<>1 THEN
  66. 50560  OUT &HFD90,11
  67. 50570  S_11%(0)=INP(&HFD92):S_11%(1)=INP(&HFD94):S_11%(2)=INP(&HFD96)
  68. 50580  OUT &HFD90,12
  69. 50590  S_12%(0)=INP(&HFD92):S_12%(1)=INP(&HFD94):S_12%(2)=INP(&HFD96)
  70. 50600  OUT &HFD90,13
  71. 50610  S_13%(0)=INP(&HFD92):S_13%(1)=INP(&HFD94):S_13%(2)=INP(&HFD96)
  72. 50620  OUT &HFD90,15+S_M*120
  73. 50630  S_15%(0)=INP(&HFD92):S_15%(1)=INP(&HFD94):S_15%(2)=INP(&HFD96)
  74. 50640  PALETTE 11,[88,24,24]
  75. 50650  PALETTE 12,[168,96,104]
  76. 50660  PALETTE 13,[248,144,192]
  77. 50670  PALETTE 15+S_M*120,[255,255,255]
  78. 50680 ENDIF
  79. 50690 GOSUB *S_DRV:GOSUB *S_GET:GOSUB *S_CLR
  80. 50700 '■  MAIN
  81. 50710 WHILE S_Q=0
  82. 50720  GOSUB *S_MOUSE0:S_X=S_X-S_SX:S_Y=S_Y-S_SY
  83. 50730  *S_MAIN
  84. 50740  IF MOUSE(2,0) THEN
  85. 50750   IF S_X>=0 AND S_X<=S_EX AND S_Y>=0 AND S_Y<=S_EY THEN GOSUB *S_CK
  86. 50760   GOSUB *S_WH
  87. 50770  ENDIF
  88. 50780  IF MOUSE(2,1)=-1 AND S_MK=-1 THEN
  89. 50790   S_I=S_SY+36+S_MKY*16
  90. 50800   IF S_MKY<>-1 THEN LINE(S_SX+3,S_I)-(S_SX+114,S_I+15),XOR,7,BF
  91. 50810   S_MK=0
  92. 50820  ENDIF
  93. 50830 WEND
  94. 50840 IF S_FILE$<>"" AND KINSTR(S_FILE$,".")=0 THEN
  95. 50850  IF KINSTR(S_KAKU$,"*")=0 AND KINSTR(S_KAKU$,"?")=0 THEN
  96. 50860   S_MK$=LEFT$(S_FILE$,8)+S_KAKU$:GOSUB *S_CLR:WAIT 20
  97. 50870   S_FILE$=S_MK$
  98. 50880  ENDIF
  99. 50890 ENDIF
  100. 50900 IF S_M<>1 THEN
  101. 50910  PALETTE 11,[S_11%(2),S_11%(1),S_11%(0)]
  102. 50920  PALETTE 12,[S_12%(2),S_12%(1),S_12%(0)]
  103. 50930  PALETTE 13,[S_13%(2),S_13%(1),S_13%(0)]
  104. 50940  PALETTE 15+S_M*120,[S_15%(2),S_15%(1),S_15%(0)]
  105. 50950 ENDIF
  106. 50960 PUT@A(S_SX,S_SY)-(S_SX+S_EX,S_SY+S_EY),S_SEL%,,,,,S_UN&
  107. 50970 VIEW(S_VSX1,S_VSY1)-(S_VSX2,S_VSY2)
  108. 50980 WINDOW(S_WSX1,S_WSY1)-(S_WSX2,S_WSY2)
  109. 50990 IF S_PATH THEN
  110. 51000  GOSUB *S_PATH
  111. 51010  S_DRV$=LEFT$(S_PP$,1):CALLM S_O&,3,ASC(S_DRV$)
  112. 51020  S_PP$=MID$(S_PP$,3)+CHR$(0):CALLM S_O&,4,VARPTR(S_PP$)
  113. 51030 ELSE
  114. 51040  S_PATH$=""
  115. 51050 ENDIF
  116. 51060 RETURN
  117. 51070 '■  左クリック
  118. 51080 *S_CK
  119. 51090 S_TR=4:GOSUB *S_TR
  120. 51100 IF S_TR=-1 THEN
  121. 51110  GOSUB *S_ON
  122. 51120  S_DRV=S_DRV-1-(S_DRV=1)*S_DD:S_F=-1
  123. 51130  S_DRV$=MID$(S_DD$,S_DRV,1)
  124. 51140  GOSUB *S_DRV_M:GOSUB *S_OFF:RETURN
  125. 51150 ENDIF
  126. 51160 S_TR=5:GOSUB *S_TR
  127. 51170 IF S_TR=-1 THEN
  128. 51180  GOSUB *S_ON
  129. 51190  S_DRV=S_DRV+1+(S_DRV=S_DD)*S_DD:S_F=-1
  130. 51200  S_DRV$=MID$(S_DD$,S_DRV,1)
  131. 51210  GOSUB *S_DRV_M:GOSUB *S_OFF:RETURN
  132. 51220 ENDIF
  133. 51230 S_TR=3:GOSUB *S_TR
  134. 51240 IF S_TR=-1 THEN
  135. 51250  GOSUB *S_ON:S_Q=1:S_FILE$="":RETURN
  136. 51260 ENDIF
  137. 51270 S_TR=2:GOSUB *S_TR
  138. 51280 IF S_TR=-1 THEN
  139. 51290  GOSUB *S_ON:GOSUB *S_CDRV:GOSUB *S_OFF:RETURN
  140. 51300 ENDIF
  141. 51310 S_TR=1:GOSUB *S_TR
  142. 51320 IF S_TR=-1 THEN
  143. 51330  GOSUB *S_ON
  144. 51340  IF S_MODE=0 THEN S_KZ$=S_KAKU$:S_KAKU$=".*" ELSE S_KAKU$=S_KZ$
  145. 51350  S_MODE=(S_MODE=0):S_F=-1
  146. 51360  IF S_MODE=0 THEN S_TR=1:GOSUB *S_TR:GOSUB *S_OFF
  147. 51370 ENDIF
  148. 51380 IF S_F THEN GOSUB *S_CDRV:RETURN
  149. 51390 IF S_X>=3 AND S_Y>=36 AND S_X<=114 AND S_Y<=163 THEN *S_FILE
  150. 51400 S_TR=6:GOSUB *S_TR
  151. 51410 IF S_TR=-1 THEN
  152. 51420  GOSUB *S_ON
  153. 51430  WHILE MOUSE(2,0)
  154. 51440   IF S_START>1 THEN
  155. 51450    S_START=S_START-1:S_I=0
  156. 51460    IF S_MKY<7 AND S_MKY>-1 THEN S_MKY=S_MKY+1 ELSE S_MKY=-1
  157. 51470    GET@A(S_SX+3,S_SY+36)-(S_SX+114,S_SY+147),S_SEL%
  158. 51480    PUT@A(S_SX+3,S_SY+52)-(S_SX+114,S_SY+163),S_SEL%
  159. 51490    GOSUB *S_BA2
  160. 51500   ENDIF
  161. 51510  WEND
  162. 51520  GOSUB *S_OFF:RETURN
  163. 51530 ENDIF
  164. 51540 S_TR=7:GOSUB *S_TR
  165. 51550 IF S_TR=-1 THEN
  166. 51560  GOSUB *S_ON
  167. 51570  WHILE MOUSE(2,0)
  168. 51580   IF S_START+7<S_MAX THEN
  169. 51590    S_START=S_START+1:S_I=7
  170. 51600    IF S_MKY<8 AND S_MKY>0 THEN S_MKY=S_MKY-1 ELSE S_MKY=-1
  171. 51610    GET@A(S_SX+3,S_SY+52)-(S_SX+114,S_SY+163),S_SEL%
  172. 51620    PUT@A(S_SX+3,S_SY+36)-(S_SX+114,S_SY+147),S_SEL%
  173. 51630    GOSUB *S_BA2
  174. 51640   ENDIF
  175. 51650  WEND
  176. 51660  GOSUB *S_OFF:RETURN
  177. 51670 ENDIF
  178. 51680 S_TR=8:GOSUB *S_TR
  179. 51690 IF S_TR=-1 THEN
  180. 51700  GOSUB *S_ON
  181. 51710  S_DIR$=".."+CHR$(0)
  182. 51720  CALLM S_O&,4,VARPTR(S_DIR$)
  183. 51730  GOSUB *S_GET:S_MK=0:GOSUB *S_OFF:RETURN
  184. 51740 ENDIF
  185. 51750 IF S_INPUT=-1 THEN
  186. 51760  S_TR=9:GOSUB *S_TR
  187. 51770  IF S_TR=-1 THEN
  188. 51780   GOSUB *S_ON:S_FILE$=S_MK$:S_Q=1:RETURN
  189. 51790  ENDIF
  190. 51800  S_TR=10:GOSUB *S_TR
  191. 51810  IF S_TR=-1 THEN
  192. 51820   GOTO *S_SFT
  193. 51830  ELSE IF S_X>=19 AND S_Y>=169 AND S_X<=114 AND S_Y<=184 THEN
  194. 51840   GOTO *S_ENT
  195. 51850  ENDIF
  196. 51860 ENDIF
  197. 51870 IF S_X>=116 AND S_Y>=44 AND S_X<=122 AND S_Y<=155 THEN
  198. 51880  S_COL=13:S_Y=S_Y-44
  199. 51890  IF S_Y<S_BY OR S_Y>S_BY+S_BL THEN S_BY=S_Y-INT(S_BL/2)
  200. 51900  IF S_BY<0 THEN S_BY=0
  201. 51910  IF S_BY+S_BL>111 THEN S_BY=111-S_BL
  202. 51920  S_OY=S_BY-S_Y:S_Y=0
  203. 51930  WHILE MOUSE(2,0)
  204. 51940   S_YY=S_START:GOSUB *S_MOUSE0:S_Y=S_Y-S_SY-44
  205. 51950   S_BY=S_Y+S_OY
  206. 51960   IF S_BY<0 THEN S_BY=0
  207. 51970   IF S_BY+S_BL>111 THEN S_BY=111-S_BL
  208. 51980   IF S_MAX<104 THEN
  209. 51990    S_START=S_BY+1
  210. 52000   ELSE
  211. 52010    S_START=CINT(S_BY*((S_MAX-8)/103)+1)
  212. 52020   ENDIF
  213. 52030   IF S_START<>S_YY THEN
  214. 52040    GOSUB *S_PUT
  215. 52050   ENDIF
  216. 52060  WEND
  217. 52070  S_COL=12:GOSUB *S_BAR:RETURN
  218. 52080 ENDIF
  219. 52090 S_TR=11:GOSUB *S_TR
  220. 52100 IF S_TR=-1 THEN
  221. 52110  IF S_MK=0 THEN RETURN
  222. 52120  GOSUB *S_ON
  223. 52130  LINE(S_SX+19,S_SY+17)-(S_SX+114,S_SY+32),PSET,0,BF
  224. 52140  S_A$=S_MK$+CHR$(0)
  225. 52150  S_RET&=CALLM(S_O&,14,VARPTR(S_A$))
  226. 52160  S_A$=STR$(S_RET&)
  227. 52170  IF S_RET&>=0 THEN
  228. 52180   SYMBOL(S_SX+115-LEN(S_A$)*8,S_SY+17),S_A$,1,1,7
  229. 52190  ENDIF
  230. 52200  GOSUB *S_OFF
  231. 52210  LINE(S_SX+19,S_SY+17)-(S_SX+114,S_SY+32),PSET,0,BF
  232. 52220  SYMBOL(S_SX+19,S_SY+17),S_DIR$,1,1,7
  233. 52230  RETURN
  234. 52240 ENDIF
  235. 52250 '■  セレクターの移動
  236. 52260 *S_MOVE
  237. 52270 S_OX=-S_X:S_OY=-S_Y
  238. 52280 GET@A(S_SX,S_SY)-(S_SX+S_EX,S_SY+S_EY),S_SEL%
  239. 52290 PUT@A(S_SX,S_SY)-(S_SX+S_EX,S_SY+S_EY),S_SEL%,,,,,S_UN&
  240. 52300 LINE(S_SX,S_SY)-(S_SX+S_EX,S_SY+S_EY),XOR,7,B
  241. 52310 WHILE MOUSE(2,0)
  242. 52320  S_XX=S_X:S_YY=S_Y:GOSUB *S_MOUSE0
  243. 52330  IF S_XX<>S_X OR S_YY<>S_Y THEN
  244. 52340   LINE(S_SX,S_SY)-(S_SX+S_EX,S_SY+S_EY),XOR,7,B
  245. 52350   S_SX=S_X+S_OX:S_SY=S_Y+S_OY
  246. 52360   IF S_SX<S_左上X THEN S_SX=S_左上X
  247. 52370   IF S_SY<S_左上Y THEN S_SY=S_左上Y
  248. 52380   IF S_SX+S_EX>S_右下X THEN S_SX=S_右下X-S_EX
  249. 52390   IF S_SY+S_EY>S_右下Y THEN S_SY=S_右下Y-S_EY
  250. 52400   LINE(S_SX,S_SY)-(S_SX+S_EX,S_SY+S_EY),XOR,7,B
  251. 52410  ENDIF
  252. 52420 WEND
  253. 52430 LINE(S_SX,S_SY)-(S_SX+S_EX,S_SY+S_EY),XOR,7,B
  254. 52440 GET@A(S_SX,S_SY)-(S_SX+S_EX,S_SY+S_EY),S_SEL%,S_UN&
  255. 52450 PUT@A(S_SX,S_SY)-(S_SX+S_EX,S_SY+S_EY),S_SEL%
  256. 52460 RETURN
  257. 52470 '■  ファイルウィンドウ内でクリックされた
  258. 52480 *S_FILE
  259. 52490 IF S_MK=0 THEN
  260. 52500  GOSUB *S_MARK
  261. 52510  IF KLEFT$(S_F$(S_START+S_MKY),1)="D" THEN *S_CD
  262. 52520 ELSE IF ABS(S_X-S_X2)>1 OR ABS(S_Y-S_Y2)>1 THEN
  263. 52530  S_I=S_SY+36+S_MKY*16
  264. 52540  IF S_MKY<>-1 THEN LINE(S_SX+3,S_I)-(S_SX+114,S_I+15),XOR,7,BF
  265. 52550  S_MK=0:GOSUB *S_MARK
  266. 52560  IF KLEFT$(S_F$(S_START+S_MKY),1)="D" THEN *S_CD
  267. 52570 ELSE
  268. 52580  S_FILE$=MID$(S_F$(S_START+S_MKY),2,12)+" "
  269. 52590  S_FILE$=KLEFT$(S_FILE$,KINSTR(S_FILE$," ")-1)
  270. 52600  S_Q=1:RETURN
  271. 52610 ENDIF
  272. 52620 RETURN
  273. 52630 '■  ファイルのマーク
  274. 52640 *S_MARK
  275. 52650 S_MKY=(S_Y-36)\ 16:S_I=S_SY+36+S_MKY*16
  276. 52660 IF S_MKY+S_START>S_MAX THEN RETURN
  277. 52670 LINE(S_SX+3,S_I)-(S_SX+114,S_I+15),XOR,7,BF
  278. 52680 IF KLEFT$(S_F$(S_START+S_MKY),1)="F" THEN
  279. 52690  S_MK$=MID$(S_F$(S_START+S_MKY),2,12)
  280. 52700  S_MK$=S_MK$+" ":S_MK$=KLEFT$(S_MK$,KINSTR(S_MK$," ")-1)
  281. 52710  IF S_INPUT THEN GOSUB *S_CLR
  282. 52720 ENDIF
  283. 52730 S_MKYY=S_START+S_MKY
  284. 52740 S_MK=-1:S_X2=S_X:S_Y2=S_Y:RETURN
  285. 52750 '■ カレントドライブを取得
  286. 52760 *S_DRV
  287. 52770 S_RET&=CALLM(S_O&,1):S_DRV$=CHR$(S_RET&):S_DRV=INSTR(S_DD$,S_DRV$)
  288. 52780 *S_DRV_M
  289. 52790 LINE(S_SX+13,S_SY+4)-(S_SX+21,S_SY+13),PSET,0,BF
  290. 52800 SYMBOL(S_SX+13,S_SY+4),S_DRV$,1,.6!,7
  291. 52810 S_AA%=0:RETURN
  292. 52820 '■  全ファイル名を取得
  293. 52830 *S_IDO
  294. 52840 S_I=S_CHECK:S_J=S_I*2:S_Q=0
  295. 52850 WHILE S_J<=S_N AND S_Q=0
  296. 52860  IF S_J<S_N THEN IF S_F$(S_J)<S_F$(S_J+1) THEN S_J=S_J+1
  297. 52870  IF S_F$(S_I)>=S_F$(S_J) THEN
  298. 52880   S_Q=1
  299. 52890  ELSE
  300. 52900   SWAP S_F$(S_I),S_F$(S_J)
  301. 52910   S_I=S_J:S_J=S_I*2
  302. 52920  ENDIF
  303. 52930 WEND
  304. 52940 S_Q=0:RETURN
  305. 52950 *S_GET
  306. 52960 S_MAX=1:S_START=1:S_A%=0:S_RET&=0:S_B$="":S_C=-1
  307. 52970 IF S_KAKU$=".*" THEN S_B$=S_KAKU$
  308. 52980 IF S_KAKU$=".?" OR S_KAKU$=".??" THEN S_B$=S_KAKU$
  309. 52990 IF S_KAKU$="." THEN S_B$=S_KAKU$
  310. 53000 WHILE S_RET&=0
  311. 53010  S_A$="*"+S_B$+CHR$(0):S_F$(S_MAX)=STRING$(14," ")
  312. 53020  S_RET&=CALLM(S_O&,0,VARPTR(S_A$),VARPTR(S_F$(S_MAX)),&H10,S_A%)
  313. 53030  S_A%=1:S_MAX=S_MAX+1
  314. 53040  IF S_MAX>S_FULL THEN S_RET&=-1
  315. 53050  IF S_RET&=0 THEN S_C=0
  316. 53060  IF S_RET&<>0 AND S_B$="" THEN
  317. 53070   S_B$=S_KAKU$:S_MAX=S_MAX-1:S_RET&=0:S_A%=0
  318. 53080  ENDIF
  319. 53090 WEND
  320. 53100 IF S_C THEN S_MAX=0:GOTO *S_PUT
  321. 53110 S_F$(S_MAX-1)="":S_MAX=S_MAX-2
  322. 53120 '■  ファイル名ソート
  323. 53130 S_N=S_MAX
  324. 53140 FOR S_CHECK=CINT(S_N/2) TO 1 STEP -1
  325. 53150  GOSUB *S_IDO
  326. 53160 NEXT
  327. 53170 WHILE S_N>1
  328. 53180  SWAP S_F$(S_N),S_F$(1)
  329. 53190  S_N=S_N-1:S_CHECK=1:GOSUB *S_IDO
  330. 53200 WEND
  331. 53210 IF KLEFT$(S_F$(1),3)="D. " THEN S_F$(1)="D\ "
  332. 53220 S_BL=111+(S_MAX-8)*(S_MAX>8):IF S_BL<8 THEN S_BL=8
  333. 53230 S_BY=0
  334. 53240 '■  カレントディレクトリーを取得
  335. 53250 LINE(S_SX+19,S_SY+17)-(S_SX+114,S_SY+32),PSET,0,BF
  336. 53260 IF S_MAX=0 THEN *S_PUT
  337. 53270 S_PATH$=STRING$(65,0)
  338. 53280 S_RET&=CALLM(S_O&,2,ASC(S_DRV$),VARPTR(S_PATH$))
  339. 53290 S_I=1
  340. 53300 WHILE S_I>0
  341. 53310  S_J=S_I+1:S_I=KINSTR(S_J,S_PATH$,"\")
  342. 53320 WEND
  343. 53330 S_DIR$=KMID$(S_PATH$,S_J)
  344. 53340 SYMBOL(S_SX+19,S_SY+17),S_DIR$,1,1,7
  345. 53350 '■ ファイル名を8つ表示
  346. 53360 *S_PUT
  347. 53370 IF S_MAX=0 THEN
  348. 53380  LINE(S_SX+3,S_SY+36)-(S_SX+114,S_SY+163),PSET,0,BF
  349. 53390  LINE(S_SX+19,S_SY+17)-(S_SX+114,S_SY+32),PSET,0,BF
  350. 53400  GOSUB *S_13:SYMBOL(S_SX+23,S_SY+90),"No Files.",1,1
  351. 53410  RETURN
  352. 53420 ENDIF
  353. 53430 GOSUB *S_BAR:S_MKY=-1
  354. 53440 FOR S_I=0 TO 7
  355. 53450  GOSUB *S_P
  356. 53460 NEXT
  357. 53470 RETURN
  358. 53480 *S_P
  359. 53490 IF S_I+S_START>S_MAX THEN S_F$(S_START+S_I)=""
  360. 53500 IF KLEFT$(S_F$(S_START+S_I),1)="D" THEN
  361. 53510  S_A$="<            >"
  362. 53520  MID$(S_A$,2,10)=MID$(S_F$(S_START+S_I),2,12)
  363. 53530 ELSE IF S_F$(S_START+S_I)<>"" THEN
  364. 53540  S_J=INSTR(S_F$(S_START+S_I),".")-2
  365. 53550  IF S_J=-2 THEN S_J=8
  366. 53560  S_A$="         "
  367. 53570  MID$(S_A$,2)=MID$(S_F$(S_START+S_I),2,S_J)
  368. 53580  S_A$=S_A$+MID$(S_F$(S_START+S_I),S_J+2,4)
  369. 53590 ELSE
  370. 53600  S_A$=""
  371. 53610 ENDIF
  372. 53620 S_J=S_SY+36+S_I*16
  373. 53630 LINE(S_SX+3,S_J)-(S_SX+114,S_J+15),PSET,0,BF
  374. 53640 SYMBOL(S_SX+3,S_J),S_A$,1,1,7
  375. 53650 IF S_MKYY=S_I+S_START AND S_MK=-1 THEN
  376. 53660  LINE(S_SX+3,S_J)-(S_SX+114,S_J+15),XOR,7,BF:S_MKY=S_I
  377. 53670 ENDIF
  378. 53680 RETURN
  379. 53690 '■  スクロールバーを描画
  380. 53700 *S_BA2
  381. 53710 GOSUB *S_P:WAIT 1
  382. 53720 IF S_MAX<104 THEN
  383. 53730  S_BY=S_START-1
  384. 53740 ELSE
  385. 53750  S_BY=CINT((S_START-1)/((S_MAX-8)/103))
  386. 53760 ENDIF
  387. 53770 *S_BAR
  388. 53780 IF S_BY<0 THEN S_BY=0
  389. 53790 IF S_BY+S_BL>155 THEN S_BY=155-S_BL
  390. 53800 GOSUB *S_11:LINE(S_SX+116,S_SY+44)-(S_SX+122,S_SY+155),PSET,,BF
  391. 53810 IF S_COL=12 THEN
  392. 53820  GOSUB *S_12
  393. 53830  LINE(S_SX+116,S_SY+44+S_BY)-(S_SX+122,S_SY+44+S_BY+S_BL),PSET,,B
  394. 53840 ELSE
  395. 53850  GOSUB *S_13
  396. 53860  LINE(S_SX+116,S_SY+44+S_BY)-(S_SX+122,S_SY+44+S_BY+S_BL),PSET,,B
  397. 53870 ENDIF
  398. 53880 RETURN
  399. 53890 '■  ボタンの処理
  400. 53900 *S_TR
  401. 53910 IF S_TR= 6 THEN S_1=115:S_2= 35:S_3=123:S_4= 43:GOTO *S_TR_E'▲
  402. 53920 IF S_TR= 7 THEN S_1=115:S_2=156:S_3=123:S_4=164:GOTO *S_TR_E'▼
  403. 53930 IF S_TR= 4 THEN S_1=  2:S_2=  3:S_3=  9:S_4= 13:GOTO *S_TR_E'<
  404. 53940 IF S_TR= 5 THEN S_1= 24:S_2=  3:S_3= 31:S_4= 13:GOTO *S_TR_E'>
  405. 53950 IF S_TR= 8 THEN S_1=115:S_2= 16:S_3=123:S_4= 33:GOTO *S_TR_E'UP
  406. 53960 IF S_TR= 2 THEN S_1= 11:S_2=  2:S_3= 22:S_4= 14:GOTO *S_TR_E'DRIVE
  407. 53970 IF S_TR=10 THEN S_1=  2:S_2=168:S_3= 18:S_4=185:GOTO *S_TR_E'KEY
  408. 53980 IF S_TR= 3 THEN S_1=111:S_2=  2:S_3=123:S_4= 14:GOTO *S_TR_E'EXIT
  409. 53990 IF S_TR= 9 THEN S_1=115:S_2=168:S_3=123:S_4=185:GOTO *S_TR_E'RET
  410. 54000 IF S_TR= 1 THEN S_1= 99:S_2=  3:S_3=109:S_4= 13:GOTO *S_TR_E'.*
  411. 54010 IF S_TR=11 THEN S_1=  2:S_2= 16:S_3= 18:S_4= 33'             SIZE
  412. 54020 *S_TR_E
  413. 54030 IF S_X<S_1 OR S_Y<S_2 OR S_X>S_3 OR S_Y>S_4 THEN S_TR=0 ELSE S_TR=-1
  414. 54040 RETURN
  415. 54050 *S_11
  416. 54060 IF S_M=1 THEN COLOR ,,[88,24,24] ELSE COLOR ,,%11
  417. 54070 RETURN
  418. 54080 *S_12
  419. 54090 IF S_M=1 THEN COLOR ,,[168,96,104] ELSE COLOR ,,%12
  420. 54100 RETURN
  421. 54110 *S_13
  422. 54120 IF S_M=1 THEN COLOR ,,[248,144,192] ELSE COLOR ,,%13
  423. 54130 RETURN
  424. 54140 *S_ON
  425. 54150 IF S_M<>1 THEN
  426. 54160  GET@(S_SX+S_1,S_SY+S_2)-(S_SX+S_3,S_SY+S_4),S_SEL%,%12
  427. 54170 ELSE
  428. 54180  GET@(S_SX+S_1,S_SY+S_2)-(S_SX+S_3,S_SY+S_4),S_SEL%,[168,96,104]
  429. 54190 ENDIF
  430. 54200 GOSUB *S_13:PUT@(S_SX+S_1,S_SY+S_2)-(S_SX+S_3,S_SY+S_4),S_SEL%
  431. 54210 RETURN
  432. 54220 *S_OFF
  433. 54230 GOSUB *S_WH
  434. 54240 IF S_M<>1 THEN
  435. 54250  GET@(S_SX+S_1,S_SY+S_2)-(S_SX+S_3,S_SY+S_4),S_SEL%,%13
  436. 54260 ELSE
  437. 54270  GET@(S_SX+S_1,S_SY+S_2)-(S_SX+S_3,S_SY+S_4),S_SEL%,[248,144,192]
  438. 54280 ENDIF
  439. 54290 GOSUB *S_12:PUT@(S_SX+S_1,S_SY+S_2)-(S_SX+S_3,S_SY+S_4),S_SEL%
  440. 54300 RETURN
  441. 54310 '■  マウス
  442. 54320 *S_MOUSE0
  443. 54330 S_X=MOUSE(0):S_Y=MOUSE(1)
  444. 54340 IF S_F=-1 THEN
  445. 54350  S_AA%=S_AA%+1:WAIT 1
  446. 54360  IF S_AA%=290 THEN S_AA%=0:GOSUB *S_CDRV
  447. 54370 ENDIF
  448. 54380 RETURN
  449. 54390 *S_WH WHILE MOUSE(2,0):WEND:RETURN
  450. 54400 '■  カレントディレクトリーの移動
  451. 54410 *S_CD
  452. 54420 S_MK=0:GOSUB *S_CLR
  453. 54430 S_I=INSTR(S_F$(S_START+S_MKY)," ")-2
  454. 54440 IF S_I=-2 THEN S_I=12
  455. 54450 S_DIR$=MID$(S_F$(S_START+S_MKY),2,S_I)+CHR$(0)
  456. 54460 CALLM S_O&,4,VARPTR(S_DIR$)
  457. 54470 GOSUB *S_GET:RETURN
  458. 54480 '■  カレントドライブの移動
  459. 54490 *S_CDRV
  460. 54500 S_MK=0:GOSUB *S_CLR:S_F=0
  461. 54510 CALLM S_O&,3,ASC(S_DRV$)
  462. 54520 GOSUB *S_GET:RETURN
  463. 54530 '■  マークウィンドウを消す
  464. 54540 *S_CLR
  465. 54550 IF S_INPUT THEN
  466. 54560  LINE(S_SX+19,S_SY+169)-(S_SX+114,S_SY+184),PSET,0,BF
  467. 54570  SYMBOL(S_SX+19,S_SY+169),S_MK$,1,1,7
  468. 54580 ENDIF
  469. 54590 RETURN
  470. 54600 '■ ソフトウェアキーボード
  471. 54610 *S_SFT
  472. 54620 GOSUB *S_ON
  473. 54630 GET@A(S_SX+2,S_SY+35)-(S_SX+115,S_SY+164),S_SEL%,200
  474. 54640 GOSUB *S_13
  475. 54650 LINE(S_SX+2,S_SY+35)-(S_SX+115,S_SY+164),PSET,,BF,0
  476. 54660 SYMBOL(S_SX+7,S_SY+42),"ソフトウェアキーボード",1,1
  477. 54670 SYMBOL(S_SX+3,S_SY+68),"ABCDEFG",1,1,7
  478. 54680 SYMBOL(S_SX+3,S_SY+84),"HIJKLMN",1,1,7
  479. 54690 SYMBOL(S_SX+3,S_SY+100),"OPQRSTU",1,1,7
  480. 54700 SYMBOL(S_SX+3,S_SY+116),"VWXYZ._",1,1,7
  481. 54710 SYMBOL(S_SX+3,S_SY+132),"0123456",1,1,7
  482. 54720 SYMBOL(S_SX+3,S_SY+148),"789",1,1,7
  483. 54730 GOSUB *S_12
  484. 54740 SYMBOL(S_SX+3+16*3,S_SY+148),"BS←→",1,1
  485. 54750 SYMBOL(S_SX+3+16*6,S_SY+148),"DEL",.66!,1
  486. 54760 GOSUB *S_WH
  487. 54770 IF S_ENX-1>LEN(S_MK$) THEN S_ENX=LEN(S_MK$)+1
  488. 54780 IF S_ENX<1 THEN S_ENX=1
  489. 54790 GOSUB *S_CUR:S_Q=MOUSE(3,1):S_Q=0
  490. 54800 WHILE S_Q=0
  491. 54810  S_Q=MOUSE(3,1):GOSUB *S_MOUSE0:S_X=S_X-S_SX:S_Y=S_Y-S_SY
  492. 54820  S_A$="":S_A$=INKEY$
  493. 54830  IF MOUSE(2,0) THEN
  494. 54840   IF S_X>=2 AND S_Y>=168 AND S_X<=123 AND S_Y<=185 THEN
  495. 54850    IF S_X<19 THEN S_Q=1:S_X=19
  496. 54860    IF S_X>114 THEN S_Q=1:S_TR=9:GOSUB *S_TR:GOSUB *S_ON
  497. 54870    GOSUB *S_CUR
  498. 54880    S_ENX=(S_X-19) \ 8+1
  499. 54890    IF S_ENX-1>LEN(S_MK$) THEN S_ENX=LEN(S_MK$)+1
  500. 54900    GOSUB *S_CUR:GOSUB *S_WH
  501. 54910   ELSE IF S_X>=3 AND S_Y>=68 AND S_X<=114 AND S_Y<=163 THEN
  502. 54920    S_I=(S_X-3)\16:S_J=(S_Y-68)\16
  503. 54930    S_X=S_SX+3+S_I*16:S_Y=S_SY+68+S_J*16
  504. 54940    GOSUB *S_13:LINE(S_X,S_Y)-(S_X+15,S_Y+15),XOR,,BF
  505. 54950    S_I=S_I+S_J*7
  506. 54960    IF S_I<26 THEN S_I=S_I+&H41 ELSE S_I=S_I-26+&H2E
  507. 54970    IF S_I=&H2F THEN S_I=&H5F
  508. 54980    IF S_I=&H3A THEN S_I=&H8
  509. 54990    IF S_I=&H3B THEN S_I=&H1D
  510. 55000    IF S_I=&H3C THEN S_I=&H1C
  511. 55010    IF S_I=&H3D THEN S_I=&H7F
  512. 55020    S_A$=CHR$(S_I):GOSUB *S_KEY:GOSUB *S_CUR:S_A$=""
  513. 55030    GOSUB *S_WH:GOSUB *S_13:LINE(S_X,S_Y)-(S_X+15,S_Y+15),XOR,,BF
  514. 55040   ENDIF
  515. 55050  ENDIF
  516. 55060  IF S_A$<>"" THEN GOSUB *S_KEY:GOSUB *S_CUR
  517. 55070 WEND
  518. 55080 GOSUB *S_CUR:S_Q=0
  519. 55090 PUT@A(S_SX+2,S_SY+35)-(S_SX+115,S_SY+164),S_SEL%,,,,,200
  520. 55100 S_TR=9:GOSUB *S_TR:GOSUB *S_OFF
  521. 55110 S_TR=10:GOSUB *S_TR:GOSUB *S_OFF:RETURN
  522. 55120 '■  ファイル名を入力する
  523. 55130 *S_ENT
  524. 55140 S_ENX=(S_X-19) \ 8+1
  525. 55150 IF S_ENX-1>LEN(S_MK$) THEN S_ENX=LEN(S_MK$)+1
  526. 55160 WHILE S_Q=0
  527. 55170  GOSUB *S_CUR
  528. 55180  S_A$=""
  529. 55190  WHILE S_A$=""
  530. 55200   S_A$=INKEY$:GOSUB *S_MOUSE0:S_X=S_X-S_SX:S_Y=S_Y-S_SY
  531. 55210   IF MOUSE(2,0) THEN
  532. 55220    GOSUB *S_CUR
  533. 55230    IF S_X<19 OR S_Y<169 OR S_X>114 OR S_Y>185 THEN RETURN *S_MAIN
  534. 55240    S_ENX=(S_X-19) \ 8+1
  535. 55250    IF S_ENX-1>LEN(S_MK$) THEN S_ENX=LEN(S_MK$)+1
  536. 55260    GOSUB *S_CUR
  537. 55270   ENDIF
  538. 55280   IF MOUSE(2,1) THEN S_A$=CHR$(13):WHILE MOUSE(2,1):WEND
  539. 55290  WEND
  540. 55300  GOSUB *S_KEY
  541. 55310 WEND
  542. 55320 S_Q=0:RETURN
  543. 55330 '■  入力されたキーの処理
  544. 55340 *S_KEY
  545. 55350 GOSUB *S_CUR
  546. 55360 IF S_A$=CHR$(13) THEN S_Q=1:RETURN
  547. 55370 IF S_A$=CHR$(8) AND S_ENX>1 THEN
  548. 55380  S_I=0
  549. 55390  IF S_ENX>2 THEN IF JIS(MID$(S_MK$,S_ENX-2,2))>255 THEN S_I=-1
  550. 55400  S_MK$=LEFT$(S_MK$,S_ENX-2+S_I)+MID$(S_MK$,S_ENX)
  551. 55410  GOSUB *S_CLR:S_ENX=S_ENX-1+S_I:S_I=0
  552. 55420 ELSE IF S_A$=CHR$(28) AND S_ENX-1<LEN(S_MK$) THEN
  553. 55430  S_ENX=S_ENX+1
  554. 55440  IF JIS(MID$(S_MK$,S_ENX-1,2))>255 THEN S_ENX=S_ENX+1
  555. 55450 ELSE IF S_A$=CHR$(127) THEN
  556. 55460  IF LEN(MID$(S_MK$,S_ENX))>1 THEN
  557. 55470   IF JIS(MID$(S_MK$,S_ENX,2))>255 THEN S_I=-1 ELSE S_I=0
  558. 55480  ENDIF
  559. 55490  S_MK$=LEFT$(S_MK$,S_ENX-1)+MID$(S_MK$,S_ENX+1-S_KK):S_I=0
  560. 55500  GOSUB *S_CLR
  561. 55510 ENDIF
  562. 55520 IF S_A$=CHR$(29) AND S_ENX>1 THEN S_ENX=S_ENX-1
  563. 55530 IF ASC(S_A$)<32 OR ASC(S_A$)>126 THEN RETURN
  564. 55540 IF LEN(S_MK$)<12 THEN
  565. 55550  S_MK$=LEFT$(S_MK$,S_ENX-1)+S_A$+MID$(S_MK$,S_ENX)
  566. 55560  GOSUB *S_CLR:IF S_ENX<12 THEN S_ENX=S_ENX+1
  567. 55570 ENDIF
  568. 55580 RETURN
  569. 55590 '■  カーソル
  570. 55600 *S_CUR
  571. 55610 IF S_ENX>1 THEN IF JIS(MID$(S_MK$,S_ENX-1,2))>255 THEN S_ENX=S_ENX-1
  572. 55620 IF S_ENX>12 THEN S_ENX=12
  573. 55630 S_I=S_SX+(S_ENX-1)*8+19
  574. 55640 GOSUB *S_13:LINE(S_I,S_SY+169)-(S_I+1,S_SY+184),XOR,,B
  575. 55650 RETURN
  576. 55660 '■  パスを取得
  577. 55670 *S_PATH
  578. 55680 S_RET&=CALLM(S_O&,1):S_DRV$=CHR$(S_RET&):S_PATH$=STRING$(65,"a")
  579. 55690 S_RET&=CALLM(S_O&,2,ASC(S_DRV$),VARPTR(S_PATH$))
  580. 55700 S_PATH$=KLEFT$(S_PATH$,KINSTR(S_PATH$+" "," ")-1)
  581. 55710 S_PATH$=S_DRV$+":"+S_PATH$
  582. 55720 IF MID$(S_PATH$,3)<>"\" THEN S_PATH$=S_PATH$+"\"
  583. 55730 RETURN
  584.